Packed instructions are carried out on packed operands. A packed operand comprises a data string consisting of a plurality of sub-strings, each defining a particular data value and referred to herein as "objects". Thus, an operand comprises a plurality of objects. Each operand is stored in a register store which has a predetermined bit capacity addressable by a single address and in which individual bit locations cannot be individually addressed. Thus, it is not possible to address and handle individual objects within each operand.
"Packed instructions" allow a common operation to be carried out on all of the objects within an operand without individually identifying them. A simple common operation is to load the operand into and out of memory.
Another "packed instruction" is an arithmetic instruction which performs the same arithmetic operation on pairs of objects from respective operands in parallel to provide a packed result operand comprising a plurality of result objects. For the execution of packed arithmetic instructions, a computer provides a packed arithmetic unit which operates on two source operands, at least one of which is packed, to generate a packed result.
It is clearly advantageous to deal with a set of objects in a single operand together, because it reduces loading and storing operations to memory and maximises the use of available register capacity by filling each register.
However, it has the disadvantage that the sequence of objects within an operand is predetermined by the order in which they are stored in memory. This sequence can only be altered by retrieving objects from memory, temporarily storing them in separate registers and writing them back to memory in a different location. This is a particular requirement for matrix manipulations. Operations of this nature require repeated accesses to memory and a long sequence of instructions. The instruction sequence takes up space in memory. It is desirable to reduce where possible the length of instruction sequences. It is also desirable to minimise memory accesses, because these are slow operations.